<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>5.认识一下VueComponent</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 
			认识一下VueComponent
					1.Student组件的本质是一个构造函数，名为VueComponent。
					2.VueComponent这个构造函数，不是程序员定义的，是Vue.extend()生成的。
					3.Vue.extend()每次生成的都是一个全新的VueComponent构造函数！！！（以后会用到）
					4.我们只需要写<Student></Student>或<Student/> Vue就会帮我们执行： new VueComponent(options)。
					5.关于this：
							(1).组件配置中：
									data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】。vc
							(2).new Vue(options)配置中：
									data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。vm
					6.VueComponent的实例对象，以后简称vc（也可称之为：组件实例对象）,Vue的实例对象，以后简称vm。
					7.vc就是一个小型的vm（vc也有：数据劫持、数据代理、生命周期.....）
		 -->
		<!-- 准备好一个容器-->
		<div id="demo"></div>
	</body>

	<script type="text/javascript">
		//阻止 vue 在启动时生成生产提示。
		Vue.config.productionTip = false

		//定义一个学生组件
		const Student = Vue.extend({
			name:'Student',
			template:`
				<div>
					<h2>学生姓名：{{name}}</h2>	
					<h2>学生年龄：{{age}}</h2>	
					<button @click="showMore">点我展示更多信息</button>
				</div>
			`,
			data(){
				return {
					name:'张三',
					age:18,
					gender:'男',
					subject:'前端'
				}
			},
			methods:{
				showMore(){
					alert(`性别：${this.gender}，所学技术：${this.subject}`)
					console.log('*****',this)
				}
			}
		})
		
		// console.log('###',typeof(Student)) //发现Student其实是一个函数
		// console.log('###',Student)

		//定义一个App组件
		const App = Vue.extend({
			name:'App',
			components:{Student},
			template:`
				<div>
					<h2>........</h2>	
					<Student/>
					<h2>........</h2>	
				</div>
			`,
			data(){
				return {b:2}
			},
			methods:{
				test2(){
					console.log('......')
				}
			}
		})
	
		//创建vm
		const vm = new Vue({
			el:'#demo',
			components:{App},
			template:'<App/>',
			data(){
				// console.log('new Vue里的this',this) //vm
				return {a:1}
			},
			methods:{
				test(){
					// console.log('new Vue里的methods中的this',this) //vm
					console.log('@')
				}
			}
		})

	</script>
</html>